/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package java2jdbc.manager;

import java.lang.reflect.Field;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java2jdbc.dao.ControladorAbstracto;
import java2jdbc.model.Producto;

/**
 *
 * @author Gabriel Bran
 */
public class ManagerProducto extends ControladorAbstracto {

    public ManagerProducto() {
    }

    public List<Producto> getProductos() {
        List<Producto> ls = new ArrayList<Producto>();
        java.sql.ResultSet productos = super.listaEntidades();
        try {
            while (productos.next()) {
                ls.add(new Producto(productos.getString("codigo"), productos.getString("descripcion"), productos.getDouble("precio")));
            }
        } catch (SQLException ex) {
            Logger.getLogger(ManagerProducto.class.getName()).log(Level.SEVERE, null, ex);
        }
        return ls;
    }

    public void guardarProducto(Producto c) {
        java.util.HashMap<Integer, String> p = new java.util.HashMap<Integer, String>();
        Field[] fields = c.getClass().getDeclaredFields();
        Integer i = 1;
        for (Field field : fields) {
            try {
                field.setAccessible(true);/* Sin esto es imposible acceder al campo private*/
                p.put(i, "'" + field.get(c).toString() + "'");
            } catch (IllegalAccessException ex) {
                Logger.getLogger(ManagerProducto.class.getName()).log(Level.SEVERE, null, ex);
            }
            i++;
        }
        super.guardar(p);
    }

    public void modificarProducto(Producto c) {
        java.util.HashMap<String, String> p = new java.util.HashMap<String, String>();
        Field[] fields = c.getClass().getDeclaredFields();

        for (Field field : fields) {
            try {
                field.setAccessible(true);/* Sin esto es imposible acceder al campo private*/
                p.put(field.getName(), "'" + field.get(c).toString() + "'");
            } catch (IllegalAccessException ex) {
                Logger.getLogger(ManagerProducto.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        super.modificar(p);
    }

    public void eliminarProducto(Producto c) {
        java.util.HashMap<String, String> p = new java.util.HashMap<String, String>();
        p.put("codigo", "'" + c.getCodigo() + "'");
        super.eliminar(p);
    }

    public List<Producto> buscarProducto(Producto c) {
        List<Producto> ls = new ArrayList<Producto>();
        java.util.HashMap<String, String> p = new java.util.HashMap<String, String>();
        p.put("codigo", "'" + c.getCodigo() + "'");
        java.sql.ResultSet productos = super.buscar(p);
        try {
            while (productos.next()) {
                ls.add(new Producto(productos.getString("codigo"), productos.getString("descripcion"), productos.getDouble("precio")));
            }
        } catch (SQLException ex) {
            Logger.getLogger(ManagerProducto.class.getName()).log(Level.SEVERE, null, ex);
        }
        return ls;
    }

    @Override
    public String getTabla() {
        return "Producto";
    }

    @Override
    public String getCamposTabla() {
        return " (codigo, descripcion, precio )";
    }
}
